[新サービス] Aurora がマルチリージョンに対応!リージョンを超えて強い一貫性を持つ Amazon Aurora DSQL が発表されました!

[新サービス] Aurora がマルチリージョンに対応!リージョンを超えて強い一貫性を持つ Amazon Aurora DSQL が発表されました!

re:Invent 2024 のキーノートでマルチリージョンで Active/Active な RDBMS である Aurora DSQL が発表されました。現在プレビュー中。

ウィスキー、シガー、パイプをこよなく愛する大栗です。

AWS re:Invent 2024 の Keynote をラスベガス現地で見ています。先ほど Amazon Aurora のリージョン間の整合性を担保しつつ書き込みができる Amazon Aurora DSQL が発表されたのでレポートします。

Amazon Aurora DSQL

Aurora DSQL は事実上無制限のスケールするサーバーレスな分散 SQL データベースです。3個の AZ にまたがる Active/Active の単一クラスタを提供して、レプリケーションやフェイルオーバーの操作を最小限に抑えます。ACID 特性を備えており、強いデータ一貫性を提供します。

特徴

Aurora DSQL は以下のような特徴を備えています。

  • 事実上無制限のスケール
  • 最大 99.999% の可用性を備えたアプリを構築
  • インフラストラクチャの管理無し
  • 強い一貫性
  • PostgreSQL 互換

また、Aurora DSQL は VPC ではなくパブリックにエンドポイントが存在しており、ゼロスケールのサーバーレスなデータベースです。

アーキテクチャ

Aurora DSQL は単一リージョン構成では Aurora Limitless Database と似たアーキテクチャをしています。3 AZ に跨る、コンピュート・レイヤー、トランザクションログ・レイヤー、ストレージ・レイヤーで構成されて、単一のクラスタエンドポイントが提供されます。単一リージョン構成では書き込みトランザクションを分散トランザクションログにコミットして 3 AZ に同期されます。

Single-Region-Cluster-Architecture

マルチリージョン構成では、99.999% の可用性を提供します。マルチリージョン構成はリンクされたリージョン毎に1個ずつの合計2個のリージョンエンドポイントを提供して単一リージョン構成と同じ復元力と接続性を持ちます。リンクされたクラスターは両方のエンドポイントで単一の論理的なデータベースを提供して強いデータ一貫性を備えた読み取りと書き込みをサポートします。リンクされたリージョンとは別に witness(監視)リージョンも必要となります。witness リージョンは暗号化されたトランザクションログを限られた期間保存してマルチリージョン構成の耐久性と可用性を提供します。

DBBLOG-4407-img2v2

パフォーマンス

Aurora DSQL が事実上無制限のスケールをするとして、クエリごとのレイテンシが気になります。特にマルチリージョン構成では通信する距離が長くなるので、より問題になります。AWS はマルチリージョン構成において Google Cloud の Spanner に比べて Aurora DSQL は4倍高速だと主張しています。ただし、Aurora DSQL は楽観的同時実行制御を採用していることに注意が必要です。楽観的同時実行制御は通常では規模が拡大して長いトランザクションなどが混入してもトランザクションが遅くなることはないですが、リージョン間で競合や衝突が多発するような場合は再実行によりパフォーマンスが劣化します。

image (6)

料金

現在プレビュー中のため無料で利用できます。一般公開時に詳しい情報が提供される予定です。

リージョン

現在 Aurora DSQL が使用可能なリージョンは以下となります。

  • 米国東部 (バージニア北部)
  • 米国東部 (オハイオ)

やってみる

実際に Aurora DSQL を起動してみます。

バージニア北部で AWS コンソールの Aurora DSQL の画面から Create cluster をクリックします。

スクリーンショット 2024-12-03 9.13.07のコピー

ここではマルチリージョン構成にするために Add linked Regions をチェックします。Linked cluster Region でオハイオを選択して Witness Region でオレゴンを選択して、Create cluster をクリックします。

スクリーンショット 2024-12-03 9.13.49のコピー

あとは数分待ちます。

スクリーンショット 2024-12-03 9.14.37

これだけで Aurora DSQL が起動します。

スクリーンショット 2024-12-03 9.17.06

オハイオにコンソールを切り替えても同様に DSQL クラスタができています。

スクリーンショット 2024-12-03 9.17.46

クラスタの詳細を確認すると以下のようになっています。

スクリーンショット 2024-12-03 9.20.19のコピー

Linked Regions を見るとリンクされたリージョンを確認できます。

スクリーンショット 2024-12-03 10.30.24

Metric では今のところ ApproximateClusterStorage しか確認できません。

スクリーンショット 2024-12-03 10.31.27

上部の Connect をクリックします。

スクリーンショット 2024-12-03 9.20.19のコピー3

するとエンドポイント、ポート、データベース名などのアクセス情報が表示されます。認証トークンでは、管理者とカスタムのデータベースロールを選択できます。ここでは管理者を選択します。そして右下の Copy をクリックするとパスワードをコピーできます。なお認証トークンの有効期間は15分となっています。

スクリーンショット 2024-12-03 9.21.19のコピー

psql で接続情報を入力してログインします。この通りログインできます。

[root@ip-10-0-2-85 bin]# psql --host=hyabtu6pcuqagk4uvhl4q5r27y.dsql.us-east-1.on.aws --port=5432 --dbname=postgres --username=admin
Password for user admin:
psql (16.4, server 16.5)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, compression: off)
Type "help" for help.

postgres=>

テーブルを作成してデータを挿入して選択すると、以下のように問題なく実行できます。

postgres=> CREATE TABLE items(item_id int, item_cat varchar, val int, item text);
CREATE TABLE
postgres=> INSERT INTO items (item_id, item_cat, val, item)
VALUES
  (1, 'AAA', 101, '111'),
  (2, 'BBB', 102, '222'),
  (3, 'CCC', 103, '333'),
  (4, 'DDD', 104, '444'),
  (5, 'EEE', 101, '111'),
  (6, 'FFF', 102, '222'),
  (7, 'GGG', 103, '333'),
  (8, 'HHH', 104, '444');
INSERT 0 8
postgres=> SELECT * FROM items;
 item_id | item_cat | val |  item
---------+----------+-----+--------
       8 | HHH      | 104 | 444
       2 | BBB      | 102 | 222
       5 | EEE      | 101 | 111
       3 | CCC      | 103 | 333
       1 | AAA      | 101 | 111
       7 | GGG      | 103 | 333
       6 | FFF      | 102 | 222
       4 | DDD      | 104 | 444
(8 rows)

次にオハイオでログインしてレコードを確認してみます。

[root@ip-172-31-15-140 bin]# psql --host=liabtu6pcuqcnbn5bxdtns7yjq.dsql.us-east-2.on.aws  --port=5432 --dbname=postgres --username=admin
Password for user admin:
psql (16.4, server 16.5)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, compression: off)
Type "help" for help.

postgres=> SELECT * FROM items;
 item_id | item_cat | val |  item
---------+----------+-----+--------
       8 | HHH      | 104 | 444
       2 | BBB      | 102 | 222
       5 | EEE      | 101 | 111
       3 | CCC      | 103 | 333
       1 | AAA      | 101 | 111
       7 | GGG      | 103 | 333
       6 | FFF      | 102 | 222
       4 | DDD      | 104 | 444
(8 rows)

オハイオからでも問題なくデータを挿入できます。

postgres=> INSERT INTO items (item_id, item_cat, val, item)
VALUES
  (9, 'III', 201, '555');
INSERT 0 1
postgres=> SELECT * FROM items;
 item_id | item_cat | val |  item
---------+----------+-----+--------
       8 | HHH      | 104 | 444
       2 | BBB      | 102 | 222
       5 | EEE      | 101 | 111
       3 | CCC      | 103 | 333
       1 | AAA      | 101 | 111
       9 | III      | 201 | 555
       7 | GGG      | 103 | 333
       6 | FFF      | 102 | 222
       4 | DDD      | 104 | 444
(9 rows)

さいごに

Aurora DSQL が発表された瞬間は Aurora Limitless Database のマルチリージョン対応かな?と思ったのですが、結構異なっていました。VPC の外側にある、ゼロスケール、起動が早い!(最初に Limitless Database を試したときには 100 分以上かかりました)

特にVPC の外側にある、ゼロスケールという点で Lambda などのサーバーレス環境からのアクセスに丁度良いです。また、マルチリージョンで Active/Active の書き込みができるため、グローバルに跨った(現在はバージニアとオハイオだけですが)アプリケーションの構築や、エッジコンピューティング環境のデータストアとしても有力です。更にエンタープライズアプリケーションにおいては、リージョン間の冗長化が極めて簡単になるため AZ 間の冗長化だけでなく、リージョン間冗長化のシステムの構築が進むのではないかと思います。

実は Aurora のアップデートは HTAP への進化かなと思っていましたが、グローバルな一貫性をもたせる方向になったというのは Aurora Watcher として興味深く思っています。re:Invent 2024 では詳細を説明するセッションもあるため参加して情報をお届けしたいと思います!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.